There are many reasons for an application to use a proxy to communicate with another application or server. Some of these reasons include anonymity of the client, accelerating access to resources (using caching or custom protocols), applying access policy to network content and services, monitoring incoming and outgoing traffic, translating non-standard protocols, and so forth.
To access the content through a proxy, there are currently three methods typically available. The first method is to change the system's global proxy setting. In this scenario, a system (such as the operation system) provides a method to enable a system-wide proxy setting in which all connections to/from the system are directed via the proxy. Often, this method requires the user to configure the proxy settings properly. For example, there are WiFi proxy settings for iOS/Android devices, but not 3G proxy settings. Another example is the use of VPN clients to tunnel all the traffic to a VPN server. This approach may not be desirable if the goal is to use a particular application through a proxy server.
The second method is to use proxy-enabled applications and modules. A few applications support SOCKS proxy or HTTP proxy settings which can be enabled by the user. Similarly, some software modules provide API's to change and control their proxy settings. Such applications and modules may be referred to as “proxy-enabled.” For example, many web browsers such as Firefox, Internet Explorer, and Chrome are proxy-enabled. A drawback of this approach is that it is limited to applications and modules that already support the desirable protocols and provide an interface to control them.
The third method is to intercept system calls. In this regard, there are ways to intercept system calls, such as TCP socket calls or HTTP commands. By intercepting these system calls, it is possible to manipulate them and force the traffic to be redirected to a proxy. This approach requires administrative access, and its functionality is extremely system dependent with unpredictable behavior. Accordingly, there is a continuing need for systems and methods to access content through a proxy without the above-described disadvantages.